package es.tikitaka.dao.impl;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;

import es.tikitaka.dao.SancionService;
import es.tikitaka.dictionary.PosicionDic;
import es.tikitaka.domain.Sancion;
import es.tikitaka.domain.Temporada;
import es.tikitaka.domain.equipo.Equipo;
import es.tikitaka.domain.liga.Jornada;
import es.tikitaka.domain.playoffs.Ronda;

/**
 * 
 * @author Saúl Domínguez
 * @since 2010
 * @category PFC
 */
@Name("sancionService")
public class SancionServiceImpl implements SancionService {

	@In
	EntityManager em;

	/**
	 * Constructor por defecto
	 */
	public SancionServiceImpl() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * Método para obtener todas las sanciones
	 * 
	 * @return
	 */
	public List<Sancion> getSanciones() {
		return null;
	}

	/**
	 * Método para obtener todas las sanciones coincidentes con los criterios de
	 * búsqueda
	 * 
	 * @param s
	 * @param temporada
	 * @param nombre
	 * @param apellidos
	 * @param jornada
	 * @param ronda
	 * @param equipo
	 * @param edad
	 * @param posicion
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List<Sancion> buscar(StringBuffer s, Temporada temporada,
			String nombre, String apellidos, Jornada jornada, Ronda ronda,
			Equipo equipo, Integer edad, PosicionDic posicion) {
		List<Sancion> sanciones = null;
		try {
			Query q = em.createQuery(s.toString());

			if (temporada != null) {
				q.setParameter("1", temporada.getId());
			}
			if (nombre != null && nombre.length() > 0) {
				q.setParameter("2", nombre);
			}
			if (apellidos != null && apellidos.length() > 0) {
				q.setParameter("3", apellidos);
			}
			if (edad != null) {
				q.setParameter("4", edad);
			}
			if (equipo != null) {
				q.setParameter("5", equipo.getId());
			}
			if (jornada != null) {
				q.setParameter("6", jornada.getId());
			}
			if (ronda != null) {
				q.setParameter("7", ronda.getId());
			}
			if (posicion != null) {
				q.setParameter("8", posicion.getId());
			}
			sanciones = q.getResultList();
		} catch (RuntimeException e) {
			e.printStackTrace();
		}
		return sanciones;
	}

	/**
	 * 
	 * @param sancion
	 * @return
	 */
	public Sancion merge(Sancion sancion) {
		em.refresh(sancion);
		return em.merge(sancion);
	}

	/**
	 * Método para eliminar una sanción del sistema
	 * 
	 * @param id
	 *            Id de la sanción
	 * @return estado del proceso (true or false)
	 */
	public boolean delete(Integer id) {
		boolean correcto;
		try {
			Sancion sancion = em.getReference(Sancion.class, id);
			em.remove(sancion);
			em.flush();
			correcto = true;
		} catch (RuntimeException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			correcto = false;
		}
		return correcto;
	}

	/**
	 * Método para almacenar en el sistema una sanción o las modificaciones
	 * sufridas por una sanción ya existente
	 * 
	 * @param sancion
	 *            Sancion a almacenar
	 * @return estado del proceso (true or false)
	 */
	public boolean save(Sancion sancion) {
		boolean correcto;
		try {
			em.persist(sancion);
			em.flush();
			correcto = true;
		} catch (RuntimeException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			correcto = false;
		}
		return correcto;
	}

}
